<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if(!class_exists('Api_tech_dbf_2016_game')){
    class Api_tech_dbf_2016_game extends CI_Controller {

        protected $_action = '';

        protected $_distance = 325;

        public function __construct(){
            parent::__construct();
            $this->load->model('Apilogmodel','m_api_log');
            $this->load->model('Usermodel','m_user');
            $this->load->model('Appmodel','m_app');
            $this->load->model('Techdbf2016gamecustomermodel','m_customer');
            $this->load->model('Techdbf2016gamelotterytimemodel','m_lottery_time');
            $this->load->model('configmodel','m_config');
            $this->load->database();


            $game_deadline = $this->m_config->getConfig(TECH_DBF_2016_GAME_DEADLINE);
            if(!empty($game_deadline) && strtotime($game_deadline) < time()) {
                $this->response->setDetail('活动已结束!');
                $this->response->responseExit();
            }

            // $this->_action = $this->uri->rsegments[1].'/'.$this->uri->rsegments[2];
            // if($this->session->userdata($this->_action) !== false) {
            //     $this->response->setDetail('请求太快，请稍后再试!');
            //     $this->response->responseExit();
            // }
            // $this->session->set_userdata($this->_action,true);
        }

        public function __destruct() {
            // $this->session->unset_userdata($this->_action);
            // //api开头的不存
            if(is_string($this->uri->rsegments[2]) && stripos($this->uri->rsegments[2], 'api') === 0) {
                return;
            }
            $customer = $this->session->userdata('tech_dbf_2016_game_customer');
            $info = $this->input->post();
            $result = $this->response->getResult();
            @$this->m_api_log->createApiLog(array(
                'ip_address' => $this->input->ip_address(),
                'customer_id' => empty($customer) ? 0 :  $customer['customer_id'],
                'request_uri' => $_SERVER['REQUEST_URI'],
                'post_data' => json_encode($info,JSON_UNESCAPED_UNICODE),
                'result_data' => json_encode($result,JSON_UNESCAPED_UNICODE),
                'api_log_time_create' => NOW,
                'ua' => empty($_SERVER['HTTP_USER_AGENT']) ? '' : $_SERVER['HTTP_USER_AGENT'],
                // 'terminal' => TERMINAL_WEIXIN,
            ));

            $this->db->close();
        }


        public function initCustomer() {
            $this->validate->setRule('openid','string');
            $this->validate->setRule('openid','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('openid_md5','string');
            $this->validate->setRule('openid_md5','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('nickname','string');
            $this->validate->setRule('nickname','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('sex','integer');
            $this->validate->setRule('sex','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('province','string');
            $this->validate->setRule('province','notnull',false);
            $this->validate->setRule('province','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('city','string');
            $this->validate->setRule('city','notnull',false);
            $this->validate->setRule('city','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('country','string');
            $this->validate->setRule('country','notnull',false);
            $this->validate->setRule('country','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('headimgurl','string');
            $this->validate->setRule('headimgurl','notnull',false);
            $this->validate->setRule('headimgurl','message',$this->lang->line('error_parameter'));
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            if(md5($info['openid'].FREEDOM_WAR_SALT) != $info['openid_md5']) {
                $this->response->setDetail('请勿恶意访问!');
                $this->response->responseExit();
            }
            unset($info['openid_md5']);
            
            $info['nickname'] = urlencode($info['nickname']);

            $customer = $this->m_customer->getCustomerByOpenid($info['openid']);
            // if($customer['customer_status'] == -2) {
            //     $this->response->setDetail('您存在恶意刷屏!');
            //     $this->response->responseExit();
            // }
            if(empty($customer)) {
                $info['customer_time_create'] = NOW;
                $customer_id = $this->m_customer->createCustomer($info);
                if($customer_id == 0) {
                    $this->response->setDetail('初始化用户失败！请刷新页面！');
                    $this->response->responseExit();
                }
                $customer = $this->m_customer->getCustomer($customer_id);
            } else if($customer['nickname'] != $info['nickname'] || $customer['headimgurl'] != $info['headimgurl']){
                $info['customer_id'] = $customer['customer_id'];
                $this->m_customer->editCustomer($info);
                $customer = $this->m_customer->getCustomer($info['customer_id']);
            }
            $customer['nickname'] = urldecode($customer['nickname']);

            $this->session->set_userdata('tech_dbf_2016_game_customer',$customer);

            $this->response->setSuccess();
            $this->response->setDetail('提交成功!');
            $this->response->setAddon(array(
                'customer' => $customer,
            ));
            $this->response->responseExit();
        }

        public function drawnLottery() {
            $customer = $this->session->userdata('tech_dbf_2016_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }
            if(!$this->m_customer->checkIsAvailableLottery($customer['customer_id'])) {
                $this->response->setDetail('今日已抽奖，不能再抽奖!');
                $this->response->setCode(-2001);
                $this->response->responseExit();
            }

            $this->validate->setRule('time','integer');
            $this->validate->setRule('count','integer');
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            if($info['time'] > 90 || $info['count'] < 40) {
                $this->response->setDetail('您未在90秒内到达硅谷并达到40积分!不能抽奖!');
                $this->response->responseExit();
            }

            $time = time();
            $last_time = $this->m_customer->getLastLotteryTime($customer['customer_id']);
            if($time - $last_time < 15) {
                $this->m_customer->editCustomer(array(
                    'customer_id' => $customer['customer_id'],
                    'customer_status' => -2,
                ));
                $customer = $this->m_customer->getCustomer($customer['customer_id']);
                $customer['nickname'] = urldecode($customer['nickname']);
                $this->session->set_userdata('tech_dbf_2016_game_customer',$customer);
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }
            
            $customer = $this->m_customer->getCustomer($customer['customer_id']);

            $lottery_result = 0;

            $lottery_time_id=0;

            $lottery_time_gift1_rate = 0;
            $lottery_time_gift2_rate = 0;
            $lottery_time_gift3_rate = 0;
            $lottery_time_gift4_rate = 0;

            $baseNum = 1000000000;

            $lotteryTime = $this->m_lottery_time->getCurrentLotteryTimeRate();
            if(!empty($lotteryTime)) {
                $lottery_time_id = $lotteryTime['lottery_time_id'];
                $lottery_time_gift1_rate = floatval($lotteryTime['lottery_time_gift1_rate']);
                $lottery_time_gift2_rate = floatval($lotteryTime['lottery_time_gift2_rate']);

                $num = rand(1,$baseNum);

                if($customer['gift_type'] == 0) {
                    //hack
                    $customer_ids = array();
                    if($lottery_time_gift2_rate > 0 && intval($lotteryTime['lottery_time_gift2_count']) > intval($lotteryTime['lottery_time_gift2_count_drawn']) && in_array($customer['customer_id'], $customer_ids)) {
                        $lottery_result = 2;
                    }
                    if($lottery_result == 0 && $lottery_time_gift1_rate > 0 && $num <= $lottery_time_gift1_rate*$baseNum
                        && intval($lotteryTime['lottery_time_gift1_count']) > intval($lotteryTime['lottery_time_gift1_count_drawn'])) {
                        $lottery_result = 1;
                    }
                    if($lottery_result == 0 && $lottery_time_gift2_rate > 0 && $num <= ($lottery_time_gift1_rate + $lottery_time_gift2_rate)*$baseNum
                        && intval($lotteryTime['lottery_time_gift2_count']) > intval($lotteryTime['lottery_time_gift2_count_drawn'])) {
                        $lottery_result = 2;
                    }
                }
            }

            //记录数据库
            $this->m_customer->createLotteryHistory(array(
                'customer_id' => $customer['customer_id'],
                'lottery_time_id' => empty($lotteryTime) ? 0 : $lotteryTime['lottery_time_id'],
                'gift_type' => $lottery_result,
                'lottery_time_time_create' => NOW,
                'game_time' => $info['time'],
                'game_count' => $info['count'],
            ));


            $this->m_customer->updateCustomerLotteryCount($customer['customer_id']);

            if($lottery_result > 0) {
                $this->m_customer->editCustomer(array(
                    'customer_id' => $customer['customer_id'],
                    'gift_type' => $lottery_result,
                    'customer_time_lottery' => NOW,
                ));
                $this->m_lottery_time->updateLotteryCountDrawn($lottery_time_id,$lottery_result);
            }

            $customer = $this->m_customer->getCustomer($customer['customer_id']);
            $customer['nickname'] = urldecode($customer['nickname']);
            $this->session->set_userdata('tech_dbf_2016_game_customer',$customer);
            
            global $g_tech_dbf_2016_game_gift;
            $addon = array();
            $addon['gift_type'] = $lottery_result;
            $addon['gift_name'] = id2name($lottery_result,$g_tech_dbf_2016_game_gift);

            $this->response->setSuccess();
            $this->response->setAddon($addon);
            $this->response->responseExit();
        }

        public function submitAddress() {
            $customer = $this->session->userdata('tech_dbf_2016_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }

            if($customer['gift_type'] == 0) {
                $this->response->setDetail('您还未中奖!');
                $this->response->responseExit();
            }

            $this->validate->setRule('customer_name','string');
            $this->validate->setRule('customer_name','message','请填您的姓名');
            $this->validate->setRule('customer_phone','string');
            $this->validate->setRule('customer_phone','message','请填您的手机号');
            $this->validate->setRule('customer_address','string');
            $this->validate->setRule('customer_address','message','请填您的收货地址');
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            if(!preg_match("/^1[0-9]\d{9}$/i", $info['customer_phone'])){
                $this->response->setDetail('请输入正确的手机号码!');
                $this->response->responseExit();
            }

            
            $info['customer_id'] = $customer['customer_id'];
            $this->m_customer->editCustomer($info);

            $customer = $this->m_customer->getCustomer($customer['customer_id']);
            $this->session->set_userdata('tech_dbf_2016_game_customer',$customer);
            
            $this->response->setSuccess();
            $this->response->setDetail('收货地址提交成功!');
            $this->response->responseExit();
        }

        public function dbview() {
            die();
            $data['desc'] = '清除北京现代数据';
            $data['ctrlName'] = $this->uri->rsegments[1];
            $this->load->view('zm/clear_db',$data);
        }
        public function clearDb(){
            die();
            $this->db->truncate('tech_dbf_2016_game_customer'); 
            $this->db->truncate('tech_dbf_2016_game_history'); 
            $this->db->truncate('tech_dbf_2016_game_lottery_history'); 
            // $this->db->truncate('tech_dbf_2016_game_lottery_time'); 
            // $this->db->truncate('tech_dbf_2016_game_lottery_time_history'); 
            

            $this->response->setSuccess();
            $this->response->setDetail('清除成功!');
            $this->response->responseExit();
        }
    }
    
}